package com.southwind.controller;


import com.southwind.entity.Back;
import com.southwind.entity.Book;
import com.southwind.entity.Borrow;
import com.southwind.entity.User;
import com.southwind.service.BackService;
import com.southwind.service.BookService;
import com.southwind.service.BorrowService;
import com.southwind.service.SortService;
import com.southwind.vo.BackVO;
import com.southwind.vo.BorrowVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 */
@Controller
@RequestMapping("/back")
public class BackController {

    @Autowired
    private BorrowService borrowService;
    @Autowired
    private BackService backService;
    @Autowired
    private BookService bookService;
    @Autowired
    private SortService sortService;

    /**
     * 显示用户还书列表
     *
     * @param session 用户的HttpSession，用于获取当前登录用户
     * @param model Spring MVC的Model对象，用于向视图传递数据
     * @return 用户还书列表页面的视图名称
     */

    @GetMapping("/list")
    public String list(HttpSession session, Model model){
        User user = (User) session.getAttribute("user"); // 获取当前登录用户
        System.out.println(user.getId());
        List<BorrowVO> backList = this.borrowService.backList(user.getId()); // 获取用户待还书列表
        model.addAttribute("list", backList); // 将列表添加到Model中
        return "/user/back";  // 返回用户还书列表页面
    }

    /**
     * 添加还书记录
     *
     * @param id 借阅记录ID
     * @return 重定向至用户还书列表页面的指令
     */

    @GetMapping("/add")
    public String add(Integer id){
        Back back = new Back(); // 创建新的还书记录
        back.setBrid(id); // 设置关联的借阅记录ID
        this.backService.save(back);  // 保存还书记录
        Borrow borrow = this.borrowService.getById(id); // 获取对应的借阅记录
        borrow.setStatus(3);// 设置借阅状态为已归还
        this.borrowService.updateById(borrow);// 更新借阅记录状态
        return "redirect:/back/list";// 重定向到用户还书列表页面
    }

    /**
     * 管理员查看所有还书记录
     *
     * @param model Spring MVC的Model对象，用于向视图传递数据
     * @return 管理员还书列表页面的视图名称
     */

    @GetMapping("/adminList")
    public String adminList(Model model){
        List<BackVO> backVOList = this.backService.backList(); // 获取所有还书记录
        model.addAttribute("list", backVOList); // 将还书记录列表添加到Model中
        return "/admin/back"; // 返回管理员还书列表页面
    }

    /**
     * 管理员确认收书
     *
     * @param id 还书记录ID
     * @return 重定向至管理员还书列表页面的指令
     */

    @GetMapping("/allow")
    public String allow(Integer id){
        Back back = this.backService.getById(id); // 获取还书记录
        back.setStatus(1);// 设置还书状态为已确认
        this.backService.updateById(back); // 更新还书记录状态
        Borrow borrow = this.borrowService.getById(back.getBrid());  // 获取关联的借阅记录
        Book book = this.bookService.getById(borrow.getBid());// 获取对应的书籍
        book.setNumber(book.getNumber()+1); // 增加书籍库存
        this.bookService.updateById(book);// 更新书籍库存
        return "redirect:/back/adminList";// 重定向到管理员还书列表页面
    }



}

